package br.com.radaction.DAO;

import br.com.radaction.DTO.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Pseudo DAO (Data Access Objetc) para realizar as operações de CRUD - expressão em língua Inglesa Create, Retrieve, Update e Delete.
 * <h1>ATENÇÃO! Para simplificar o entendimento, não foi aplicada o real pattern DAO!!!!</h1>
 * @author mertins (obrigado professor :P)
 */
public class UsuarioDAO {

    private Connection conexao;

    /**
     * Construtor único, para garantir a existência de uma conexão com um SGBD
     * @param conexao Connection já aberta com um SGBD
     */
    public UsuarioDAO(Connection conexao) {
        this.conexao = conexao;
    }

    /**
     * Método retorna o usuário e seu tipo
     * @param login String nome de usuário
     * @return usuario Usuario objeto criado apartir do ResultSet
     * @throws java.sql.SQLException
     */
    public Usuario retrieve(String login) throws SQLException {
        Usuario usuario = new Usuario();
        String query = "SELECT COD,LOGIN,SENHA FROM USUARIO WHERE LOGIN=?";
        PreparedStatement pst = this.conexao.prepareStatement(query);
        pst.setString(1, login);
        ResultSet rs = pst.executeQuery();
        if (rs.next()) {
            usuario.setCod(rs.getInt("COD"));
            usuario.setLogin(rs.getString("LOGIN"));
            usuario.setSenha(rs.getString("SENHA"));

        }
        rs.close();
        pst.close();
        return usuario;
    }

    /**
     * Método que persiste um Usuario no SGBD
     * @param usuario Usuario passado como argumento deve possuir Login e Senha
     * @throws java.sql.SQLException Qualquer erro entre o Sistema e o Banco será devolvido nesta Exceção
     */
    public void create(Usuario usuario) throws SQLException {
        String query = "INSERT INTO USUARIO(COD,LOGIN,SENHA)" +
                "VALUES(NEXTVAL('SEQUSUARIO'),?,?)";
        PreparedStatement pst = this.conexao.prepareStatement(query);
        pst.setString(1, usuario.getLogin());
        pst.setString(2, usuario.getSenha());
        pst.executeUpdate();
        pst.close();
    }
}
